// app.js
const eventBus = require('./utils/eventBus')
const { processImageUrl } = require('./utils/imageUrl')
const config = require('./config')
const analytics = require('./utils/analytics')

App({
  globalData: {
    theme: wx.getStorageSync('theme') || 'light', // 增加初始化读取本地缓存
    isAndroid: false, // 是否为Android平台
    systemInfo: null, // 系统信息
    userInfo: null, // 用户信息
    isLoggedIn: false, // 登录状态
    tabBarInterceptEnabled: true, // 是否启用tabBar拦截
    apiBaseUrl: config.development.baseURL // 从配置文件中获取API地址
  },
  
  onLaunch() {
    // 获取系统信息
    const systemInfo = wx.getSystemInfoSync();
    // 检测是否为Android平台
    const isAndroid = systemInfo.platform === 'android';
    
    this.globalData.systemInfo = systemInfo;
    this.globalData.isAndroid = isAndroid;
    
    console.log('Platform:', systemInfo.platform);
    console.log('System:', systemInfo.system);
    
    // 应用当前主题
    this.applyTheme(this.globalData.theme);
    
    // 检查是否已登录
    this.checkLoginStatus();
    
    // 监听登录和登出事件
    eventBus.on('user-login', this.handleUserLogin.bind(this));
    eventBus.on('user-logout', this.handleUserLogout.bind(this));
    
    // 监听tabBar点击事件
    this.setupTabBarInterceptor();
    
    // 初始化埋点系统
    analytics.init({
      debug: __wxConfig.envVersion === 'develop' || __wxConfig.envVersion === 'trial'
    })
    
    // 将analytics挂载到全局对象
    this.analytics = analytics;
  },
  
  // 设置tabBar点击拦截器
  setupTabBarInterceptor() {
    // 保存原始的switchTab方法
    const originalSwitchTab = wx.switchTab;
    
    // 重写switchTab方法
    wx.switchTab = (options) => {
      const url = options.url;
      console.log('TabBar切换到:', url, '登录状态:', this.globalData.isLoggedIn);
      
      // 如果不是切换到首页且用户未登录
      if (url !== '/pages/index/index' && !this.globalData.isLoggedIn && this.globalData.tabBarInterceptEnabled) {
        console.log('拦截TabBar切换，需要登录');
        // 显示登录提示
        wx.showModal({
          title: '提示',
          content: '请先登录后使用此功能',
          confirmText: '去登录',
          cancelText: '取消',
          success: (res) => {
            if (res.confirm) {
              console.log('用户确认去登录');
              // 用户点击"去登录"按钮，跳转到首页进行登录
              originalSwitchTab({
                url: '/pages/index/index',
                success: () => {
                  // 通知首页显示登录按钮
                  console.log('发送show-login-modal事件');
                  eventBus.emit('show-login-modal');
                }
              });
            }
          }
        });
      } else {
        console.log('正常切换页面');
        // 正常切换页面
        originalSwitchTab(options);
      }
    };
    
    // 保存原始的navigateTo方法
    const originalNavigateTo = wx.navigateTo;
    
    // 重写navigateTo方法，拦截需要登录的页面
    wx.navigateTo = (options) => {
      const url = options.url;
      // 需要登录的页面路径
      const loginRequiredPages = [
        '/packageA/course-booking/index',
        '/packageB/points/index',
        '/packageB/points-mall/index',
        '/packageA/profile/index',
        '/packageB/booking-history/index'
      ];
      
      // 检查是否是需要登录的页面
      const needLogin = loginRequiredPages.some(page => url.startsWith(page));
      
      if (needLogin && !this.globalData.isLoggedIn) {
        console.log('拦截页面跳转，需要登录:', url);
        // 显示登录提示
        wx.showModal({
          title: '提示',
          content: '请先登录后使用此功能',
          confirmText: '去登录',
          cancelText: '取消',
          success: (res) => {
            if (res.confirm) {
              // 用户点击"去登录"按钮，跳转到首页进行登录
              wx.switchTab({
                url: '/pages/index/index',
                success: () => {
                  // 通知首页显示登录按钮
                  eventBus.emit('show-login-modal');
                }
              });
            }
          }
        });
      } else {
        // 正常跳转页面
        originalNavigateTo(options);
      }
    };
  },
  
  // 处理Tab项点击事件的全局方法
  handleTabItemTap(page, item) {
    console.log('Tab被点击:', item.pagePath, '页面:', page.__route__);
    
    // 如果不是首页且用户未登录
    if (item.pagePath !== 'pages/index/index' && !this.globalData.isLoggedIn) {
      console.log('用户未登录，临时禁用TabBar拦截以允许显示提示框');
      
      // 临时禁用拦截器，以允许wx.switchTab执行，然后我们再拦截回首页
      this.globalData.tabBarInterceptEnabled = false;
      
      // 延迟执行，确保先显示目标页面
      setTimeout(() => {
        console.log('显示登录提示和跳转回首页');
        
        // 显示登录提示
        wx.showModal({
          title: '提示',
          content: '请先登录后使用此功能',
          confirmText: '去登录',
          cancelText: '取消',
          success: (res) => {
            if (res.confirm) {
              console.log('用户确认去登录');
              // 用户点击"去登录"按钮，跳转到首页进行登录
              wx.switchTab({
                url: '/pages/index/index',
                success: () => {
                  // 通知首页显示登录按钮
                  console.log('发送show-login-modal事件');
                  eventBus.emit('show-login-modal');
                }
              });
            } else {
              // 用户取消登录，也返回首页
              wx.switchTab({
                url: '/pages/index/index'
              });
            }
            
            // 重新启用拦截器
            this.globalData.tabBarInterceptEnabled = true;
          }
        });
      }, 100);
    }
  },
  
  // 检查登录状态
  async checkLoginStatus() {
    const token = wx.getStorageSync('token');
    if (!token) {
      this.globalData.isLoggedIn = false;
      this.globalData.userInfo = null;
      return;
    }
    
    try {
      const request = require('./utils/request');
      const res = await request({
        url: '/api/login/check',
        data: { token }
      });
      
      if (res.code === 200 && res.data.isLoggedIn) {
        // 处理头像URL
        if (res.data.user && res.data.user.avatar) {
          res.data.user.avatar = processImageUrl(res.data.user.avatar);
        }
        
        this.globalData.isLoggedIn = true;
        this.globalData.userInfo = res.data.user;
      } else {
        wx.removeStorageSync('token');
        this.globalData.isLoggedIn = false;
        this.globalData.userInfo = null;
      }
    } catch (error) {
      console.error('检查登录状态失败:', error);
      this.globalData.isLoggedIn = false;
      this.globalData.userInfo = null;
    }
  },
  
  // 处理用户登录事件
  handleUserLogin(userInfo) {
    // 确保头像URL已处理
    if (userInfo && userInfo.avatar) {
      userInfo.avatar = processImageUrl(userInfo.avatar);
    }
    
    this.globalData.isLoggedIn = true;
    this.globalData.userInfo = userInfo;
    
    // 更新所有页面的登录状态
    const pages = getCurrentPages();
    pages.forEach(page => {
      if (typeof page.onUserLogin === 'function') {
        page.onUserLogin(userInfo);
      }
    });
  },
  
  // 处理用户登出事件
  handleUserLogout() {
    this.globalData.isLoggedIn = false;
    this.globalData.userInfo = null;
    wx.removeStorageSync('token');
    
    // 更新所有页面的登录状态
    const pages = getCurrentPages();
    pages.forEach(page => {
      if (typeof page.onUserLogout === 'function') {
        page.onUserLogout();
      }
    });
  },
  
  switchTheme() {
    const newTheme = this.globalData.theme === 'light' ? 'dark' : 'light'
    this.globalData.theme = newTheme
    wx.setStorageSync('theme', newTheme)
    this.applyTheme(newTheme) // 传入新主题参数
  },

  applyTheme(theme) { // 接收当前主题参数
    const tabBarStyle = {
      backgroundColor: theme === 'light' ? '#ffffff' : '#1a1a1a',
      // 补充完整 tabBar 样式配置...
    }
    wx.setTabBarStyle(tabBarStyle)
    
    // 新增：更新所有页面数据
    const pages = getCurrentPages()
    pages.forEach(page => {
      // 同时传递主题和平台信息
      page.setData({ 
        theme,
        isAndroid: this.globalData.isAndroid
      }) 
    })
  },
  
  // 获取平台兼容性类
  getPlatformClass(className) {
    return this.globalData.isAndroid ? `${className} android-${className}-fix` : className;
  },
})
